package com.delio.server.series;

import java.sql.SQLException;

import com.delio.client.series.Serie;
import com.delio.server.base.Conexion;
import com.ibatis.sqlmap.client.SqlMapClient;


public class Series {
	public static SqlMapClient sqlMap = null;
	public static String ultimonumero;
	
	public static boolean hasSerie(Integer tienda_id, Integer tipodocumento_id) throws SQLException{
		boolean retorno = true;
		Serie sr = new Serie();
		sr.setTipodocumento_id(tipodocumento_id);
        Integer cant = (Integer)sqlMap.queryForObject("hasSerie", sr);
        if(cant == 0){
            retorno = false;
        }
		
        return retorno;
	}
	
	public static String actualizarNumeracion(String parametro){
		
        String nuevoNumero="";
        Serie numeracion;
        
        boolean actualiza = true;
        try {
	             
	        numeracion = (Serie)sqlMap.queryForObject("getSerieParametro", parametro);
	        if(ultimonumero != null){
	        	if(ultimonumero.indexOf("-") != -1)
	                ultimonumero = ultimonumero.split("-")[1];
	        	
	            if(Integer.parseInt(ultimonumero) <= Integer.parseInt(numeracion.getUltimonumero()))
	                actualiza = false;            
	            
	            numeracion.setUltimonumero(ultimonumero);            
	        }
	        numeracion = completarCeros(numeracion);
	        if(actualiza)
	            sqlMap.update("updateSerie", numeracion);
	        nuevoNumero = numeracion.getUltimonumero();
	        if(numeracion.getSerie() != null)
	            nuevoNumero = numeracion.getSerie()+"-"+nuevoNumero;
        } catch (SQLException e) {			
			e.printStackTrace();			
		}

        return nuevoNumero;
    }
    
    public static Integer getLongitud(String parametro){
    	Serie numeracion = null;
    	try {
			numeracion = (Serie)sqlMap.queryForObject("getSerieParametro", parametro);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return numeracion.getLongitudnumero();
    }

    public static String getNumeracion(String parametro){    	

        String nuevoNumero="";
        Serie numeracion = new Serie();                
		
		sqlMap = Conexion.getSqlMap();
        try {        
	        numeracion.setParametro(parametro);
	        
	        numeracion = (Serie)sqlMap.queryForObject("getSerieParametro", parametro);
	        if(ultimonumero != null)
	        	numeracion.setUltimonumero(ultimonumero);
	        
	        numeracion = completarCeros(numeracion);
	        
	        nuevoNumero = numeracion.getUltimonumero();
	        if(numeracion.getSerie() != null)
	            nuevoNumero = numeracion.getSerie()+"-"+nuevoNumero;
        } catch (SQLException e) {			
			e.printStackTrace();			
		}

        return nuevoNumero;
    }
    
    public static Serie completarCeros(Serie numeracion){
        String numeroStr="";
        Integer numero = Integer.parseInt(numeracion.getUltimonumero());
        if(ultimonumero == null)
            numero++;
        else
        	ultimonumero = null;
        numeroStr = numero.toString();
        Integer longitudNumero = numeroStr.length();
        while(numeracion.getLongitudnumero() - longitudNumero > 0){
            numeroStr = "0"+numeroStr;
            longitudNumero++;
        }
        
        numeracion.setUltimonumero(numeroStr);
        return numeracion;
    }
}
